#!/usr/bin/env python
#-*- coding:utf-8 -*-

from Tarea import *

# Genera un dicccionario donde cada palabra indica la cantidad de veces que aparecio.
class ContarPalabras(Tarea):
	def __init__(self, nombre, entrada = None, noLeer = None, salida = None, log = None, errores = None, mostrarN = 20):
		Tarea.__init__(self, nombre, entrada, noLeer, salida, log, errores)

		self.palabras = {}
		# Cantidad de palabras a mostrar
		self.mostrarN = mostrarN
		if self.mostrarN is None:
			self.mostrarN = 0

	# Funcion de utilidad para contar la cantidad de veces que la raiz de un verbo aparece en el texto procesado.
	def countPalabra(self, palabra):
		try:
			return self.palabras[palabra]
		except KeyError:
			return 0

	# Reinicia las estadisticas del proceso (cantidad de repeticiones de la raiz de un verbo).
	def resetEstadisticas(self):
		for p,c in self.palabras.items():
			c = 0

	def configurar(self, entrada, noLeer, salida, log, errores):
		Tarea.configurar(self, entrada, noLeer, salida, log, errores)
		self.resetEstadisticas()

	def process(self, linea, nReg):
		filtrada = linea.strip()
		filtrada = filtrada.lower()
		partes = filtrada.split(' ');
		resultado = list()

		for p in partes:
			try:
				self.palabras[p]+= 1
			except KeyError:
				self.palabras[p] = 1

		return Tarea.NOERROR

	def summarize(self):
		resultado = Tarea.NOERROR
		try: 
			if (self.mostrarN > 0):
				self.log.info('Resumen de palabras mas comunes:')
			ordenado = sorted(self.palabras.items(), key=lambda x: x[1], reverse=True)
			for i in xrange(len(ordenado)):
				palabra = ordenado[i][0]
				cardinalidad = ordenado[i][1]
				if i <	self.mostrarN:
					self.log.info('  - '+palabra+' '+str(cardinalidad))
				self.salida.write(palabra+' '+str(cardinalidad)+'\n')

		except Exception as e:
			self.errores.error('Excepcion: '+str(e))
			resultado = Tarea.ERROR
		return resultado
						
if __name__ == '__main__':
	pass

